<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>补充运算符</title>
    <script>
      //按位运算符,它们都是针对底层二进制的运算,性能相对较好
      /*
        按位与      &     同0(假)为0(假),同1(真)为1(真),不同为0(假)
            0010
        &   0011
        ---------
            0010
      */
      console.log(2 & 3)

      /*
        按位或      |     同0(假)为0(假),同1(真)为1(真),不同为1(真)
            0010
        |   0011
        ---------
            0011
      */
      console.log(2 | 3)

      /*
        按位异或    ^     相同为0,不同为1
        特性: 一个数字连续异或同一个数字,结果是它本身!!! 可以当做最简单的加密技巧
            0010
        ^   0011
        ---------
            0001
        ^   0011
        ---------
            0010
      */
      console.log(2 ^ 3 ^ 3)

      /*
        按位取反  ~
        8的二进制:             00000000 00000000 00000000 00000000 00000000 00000000 00000000 00001000
        按位取反(0变1,1变0):   11111111 11111111 11111111 11111111 11111111 11111111 11111111 11110111

        计算公式: ~x = -(x + 1)
      */
      console.log(~8) //-9

      /*
        位移运算符
        00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000010
        向左位移3次,相当于十进制连续乘以3次2
        00000000 00000000 00000000 00000000 00000000 00000000 00000000 00010000
      */
      //左位移
      console.log(2 << 3) //16
      //右位移
      console.log(16 >> 1) //8
    </script>
  </head>
  <body></body>
</html>
